package com.jdk.thread.action.execaction;

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @Description :
 * @FileName: CustomThreadFactory.java
 * @Author :WeiHui.Zhang
 * @Data : 2016年2月1日 下午6:33:30
 * @Version:V1.00
 */
public class CustomThreadFactory implements ThreadFactory {

	private static final AtomicInteger poolNumber = new AtomicInteger(1);
	private final ThreadGroup group;
	private final AtomicInteger threadNumber = new AtomicInteger(1);
	private final String namePrefix;

	public CustomThreadFactory(String prefix) {
		SecurityManager securitymanager = System.getSecurityManager();
		group = securitymanager == null ? Thread.currentThread().getThreadGroup() : securitymanager.getThreadGroup();
		namePrefix = (new StringBuilder()).append("pool-").append(poolNumber.getAndIncrement()).append("-")
				.append(prefix).append("-thread-").toString();
	}

	@Override
	public Thread newThread(Runnable runnable) {
		Thread thread = new Thread(group, runnable,
				(new StringBuilder()).append(namePrefix).append(threadNumber.getAndIncrement()).toString(), 0L);
		if (thread.isDaemon())
			thread.setDaemon(false);
		if (thread.getPriority() != Thread.NORM_PRIORITY)
			thread.setPriority(Thread.NORM_PRIORITY);
		return thread;
	}

}
